/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.uniceub.fsw.talentos.facade;

import br.uniceub.fsw.arquitetura.persistencia.transacao.Transacao;
import br.uniceub.fsw.arquitetura.servico.exception.NegocioException;
import br.uniceub.fsw.seguranca.facade.LoginFacade;
import br.uniceub.fsw.talentos.dao.PessoaDAO;
import br.uniceub.fsw.talentos.dao.ParceiroDAO;
import br.uniceub.fsw.talentos.vo.PessoaVO;
import br.uniceub.fsw.talentos.vo.ParceiroVO;
import br.uniceub.fsw.talentos.facade.Conversor;
import br.uniceub.fsw.util.TabelaHtml;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;

/**
 *
 * @author WinAdmin
 */
public class ParceiroFacade{
    /**
     * Mensagem de retorno do sistema.
     */
    private String message;

    /**
     * Value object do parceiro.
     */
    private PessoaVO pessoa;

    /**
     * Value object da capacitacao.
     */
    private ParceiroVO parceiro;

    /**
     * Objeto de acesso aos dados do parceiro.
     */
    private PessoaDAO pessoaDao;

    /**
     * Objeto de acesso aos dados de capacitacao.
     */
    private ParceiroDAO parceiroDao;

     /**
     * Construtor da classe.
     */
    public ParceiroFacade() {
        this.parceiroDao = new ParceiroDAO();
        this.pessoaDao = new PessoaDAO();
    }

    /**
     * Getter da mensagem de retorno.
     *
     * @return Mensagem de retorno.
     */
    public String getMessage() {
        String retorno = null;
        if(this.message == null || this.message.equals("")) {
            retorno = "&nbsp";
        } else {
            retorno = this.message;
        }
        return retorno;
    }

    /**
     * Setter da mensagem de retorno.
     *
     * @param message Mensagem de retorno.
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     *
     * Responsável por executar a operação selecionada pelo usuário.
     *
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void operacao(HttpServletRequest req, HttpServletResponse resp) {
        String oper = req.getParameter("operacao");

        if(oper != null)
        {
            if (oper.equals("consultar")) {
                this.consultar(req, resp);
            }
            if (oper.equals("incluir")) {
                this.incluirParceiro(req, resp);
            }
        }
    }

    /**
     * Retorna a Pessoa.
     *
     * @return Objeto pessoa.
     */
    public PessoaVO getPessoa() {
        return this.pessoa;
    }

    /**
     * Seta a pessoa.
     *
     * @param pessoa Objeto pessoa.
     */
    public void setPessoa(PessoaVO pessoa) {
        this.pessoa = pessoa;
    }

    /**
     * Retorna o Parceiro.
     *
     * @return Objeto parceiro.
     */
    public ParceiroVO getParceiro() {
        return parceiro;
    }

    /**
     * Seta o parceiro.
     *
     * @param parceiro Objeto parceiro.
     */
    public void setParceiro(ParceiroVO parceiro) {
        this.parceiro = parceiro;
    }


    /**
     * Consultar uma pessoa.
     *
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void consultar(HttpServletRequest req, HttpServletResponse resp) {
        String idPessoaTmp = req.getParameter("idPessoa");
//        String idSalarioTmp = req.getParameter("idSalario");

        Integer idPessoa = null;
//        Integer idSalario = null;

        if((idPessoaTmp == null || idPessoaTmp.equals("")) /* && (idParceiroTmp == null || idParceiroTmp.equals(""))*/) {
            return;
        } else {
            idPessoa = Integer.parseInt(idPessoaTmp);
//            idSalario = Integer.parseInt(idSalarioTmp);
        }

        this.pessoa = pessoaDao.consultarPorId(idPessoa);
//        this.salario = salarioDao.consultarPorId(idSalario);
    }

    /**
     * Incluir um Parceiro.
     *
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void incluirParceiro(HttpServletRequest req, HttpServletResponse resp) {
//        String idPessoa = req.getParameter("idPessoa");
        String noPessoa = req.getParameter("noPessoa");
        String tlPrincipal = req.getParameter("tlPrincipal");
        String tlSecundario = req.getParameter("tlSecundario");
        String edPessoa = req.getParameter("edPessoa");
        String noCidade = req.getParameter("noCidade");
        String sgUF = req.getParameter("sgUF");
        String nrCEP = req.getParameter("nrCEP");
        String eePessoa = req.getParameter("eePessoa");
        String nrCnpj = req.getParameter("nrCnpj");
        String dtInicioParceria = req.getParameter("dtInicioParceria");
        String dtFimParceria = req.getParameter("dtFimParceria");
        String edWeb = req.getParameter("edWeb");

        pessoa = new PessoaVO();
//        pessoa.setIdPessoa(Integer.parseInt(idPessoa));
        pessoa.setNoPessoa(noPessoa);
        pessoa.setTlPrincipal(Integer.parseInt(tlPrincipal));
        pessoa.setTlSecundario(Integer.parseInt(tlSecundario));
        pessoa.setEdPessoa(edPessoa);
        pessoa.setNoCidade(noCidade);
        pessoa.setSgUF(sgUF);
        pessoa.setNrCEP(Integer.parseInt(nrCEP));
        pessoa.setEePessoa(eePessoa);
        
        parceiro = new ParceiroVO();
        parceiro.setNrCnpj(Integer.parseInt(nrCnpj));
//        parceiro.setDtInicioParceria(Conversor.stringToSqlDate(dtInicioParceria));
 //       parceiro.setDtFimParceria(Conversor.stringToSqlDate(dtFimParceria));
        parceiro.setEdWeb(edWeb);

         String mensagem = null;
        try {
            parceiro.setDtInicioParceria(validaData(dtInicioParceria) );
        } catch ( Exception e ) {
            mensagem = "Por favor, informe uma data válida 1";//pe.getMessage();
        }

        try {
            parceiro.setDtFimParceria( validaData(dtFimParceria) );
        } catch ( Exception e ) {
            mensagem = "Por favor, informe uma data válida 2";//pe.getMessage();
        }

        // Validações da BO
    /*    try {
            PessoaBo.validarVOUnico(pessoa);
            ParceiroBo.validarVOUnico(parceiro);
        } catch(NegocioException ex) {
            mensagem = ex.getMessage();
        }   */

        if(mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

                pessoaDao.inserir(pessoa);
                parceiroDao.inserir(parceiro);

                Transacao.efetivar();

                mensagem = "Parceiro incluído com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na inclusão do parceiro: " + ex.getMessage();

                pessoa = null;
                parceiro = null;
            }
        } else {
            pessoa = null;
            parceiro = null;
        }

        this.message = mensagem;
    }


    public void alterar(HttpServletRequest req, HttpServletResponse resp) {
        String idPessoa = req.getParameter("idPessoa");
        String noPessoa = req.getParameter("noPessoa");
        String tlPrincipal = req.getParameter("tlPrincipal");
        String tlSecundario = req.getParameter("tlSecundario");
        String edPessoa = req.getParameter("edPessoa");
        String noCidade = req.getParameter("noCidade");
        String sgUF = req.getParameter("sgUF");
        String nrCEP = req.getParameter("nrCEP");
        String eePessoa = req.getParameter("eePessoa");
        String nrCnpj = req.getParameter("nrCnpj");
        String dtInicioParceria = req.getParameter("dtInicioParceria");
        String dtFimParceria = req.getParameter("dtFimParceria");
        String edWeb = req.getParameter("edWeb");

        pessoa = new PessoaVO();
        pessoa.setIdPessoa(Integer.parseInt(idPessoa));
        pessoa.setNoPessoa(noPessoa);
        pessoa.setTlPrincipal(Integer.parseInt(tlPrincipal));
        pessoa.setTlSecundario(Integer.parseInt(tlSecundario));
        pessoa.setEdPessoa(edPessoa);
        pessoa.setNoCidade(noCidade);
        pessoa.setSgUF(sgUF);
        pessoa.setNrCEP(Integer.parseInt(nrCEP));
        pessoa.setEePessoa(eePessoa);

        parceiro = new ParceiroVO();
        parceiro.setNrCnpj(Integer.parseInt(nrCnpj));
//        parceiro.setDtInicioParceria(Conversor.stringToSqlDate(dtInicioParceria));
 //       parceiro.setDtFimParceria(Conversor.stringToSqlDate(dtFimParceria));
        parceiro.setEdWeb(edWeb);

         String mensagem = null;
        try {
            parceiro.setDtInicioParceria(validaData(dtInicioParceria) );
        } catch ( Exception e ) {
            mensagem = "Por favor, informe uma data válida 1";//pe.getMessage();
        }

        try {
            parceiro.setDtFimParceria( validaData(dtFimParceria) );
        } catch ( Exception e ) {
            mensagem = "Por favor, informe uma data válida 2";//pe.getMessage();
        }

        // Validações da BO
/*        try {
            cargoBo.validarAlterarVOUnico(cargo);
            salarioBo.validarAlterarVOUnico(salario);
        } catch(NegocioException ex) {
            mensagem = ex.getMessage();
        } */

        if(mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

                pessoaDao.alterar(pessoa);

                //ROTINA PARA ALTERACAO COM O CD_Parceiro NECESSARIA

                parceiroDao.alterar(parceiro);

                Transacao.efetivar();

                mensagem = "Parceiro alterados com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na alteração do Parceiro: " + ex.getMessage();

                parceiro = null;
                pessoa = null;
            }
        } else {
            parceiro = null;
            pessoa = null;
        }

        this.message = mensagem;
    }

    public void excluir(HttpServletRequest req, HttpServletResponse resp) {
        String idPessoa = req.getParameter("idPessoa");
        String cdPessoa = req.getParameter("cdPessoa");
        String idParceiro = req.getParameter("idParceiro");

        pessoa = new PessoaVO();
        pessoa.setIdPessoa(Integer.parseInt(idPessoa));

        parceiro = new ParceiroVO();
        parceiro.setCdPessoa(Integer.parseInt(cdPessoa));
        parceiro.setIdParceiro(Integer.parseInt(idParceiro));

        String mensagem = null;

        /*
        // Validações da BO
        try {

            talentoBo.validarExclusao(talento);


        } catch(NegocioException ex) {
            mensagem = ex.getMessage();
        }
         *
         */

        if(mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

                pessoaDao.excluir(pessoa);

                //ROTINA PARA EXCLUSAO DE SALARIO NECESSARIA

                parceiroDao.excluir(parceiro);

                Transacao.efetivar();

                mensagem = "Parceiro excluídos com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na exclusão do Parceiro: " + ex.getMessage();
            }
        } else {
            parceiro = null;
            pessoa = null;
        }

        this.message = mensagem;
    }

    public void confirmar(HttpServletRequest req, HttpServletResponse resp) {
        String noPessoa = req.getParameter("noPessoa");
        String tlPrincipal = req.getParameter("tlPrincipal");
        String tlSecundario = req.getParameter("tlSecundario");
        String edPessoa = req.getParameter("edPessoa");
        String noCidade = req.getParameter("noCidade");
        String sgUF = req.getParameter("sgUF");
        String nrCEP = req.getParameter("nrCEP");
        String eePessoa = req.getParameter("eePessoa");
        String nrCnpj = req.getParameter("nrCnpj");
        String dtInicioParceria = req.getParameter("dtInicioParceria");
        String dtFimParceria = req.getParameter("dtFimParceria");
        String edWeb = req.getParameter("edWeb");

        pessoa = new PessoaVO();
        pessoa.setNoPessoa(noPessoa);
        pessoa.setTlPrincipal(Integer.parseInt(tlPrincipal));
        pessoa.setTlSecundario(Integer.parseInt(tlSecundario));
        pessoa.setEdPessoa(edPessoa);
        pessoa.setNoCidade(noCidade);
        pessoa.setSgUF(sgUF);
        pessoa.setNrCEP(Integer.parseInt(nrCEP));
        pessoa.setEePessoa(eePessoa);

        parceiro = new ParceiroVO();
        parceiro.setNrCnpj(Integer.parseInt(nrCnpj));
        parceiro.setDtInicioParceria(new java.util.Date(dtInicioParceria));
        parceiro.setDtFimParceria(new java.util.Date(dtFimParceria));
        parceiro.setEdWeb(edWeb);

 //        String mensagem = null;
      
    }

    public TabelaHtml consultarParceiro(HttpServletRequest req, HttpServletResponse resp) {
        String nome = req.getParameter("noPessoa");

        if((nome != null && !nome.equals(""))) {
            TabelaHtml tabela = new TabelaHtml();

            tabela.setCampoRetorno("idPessoa");

            tabela.adicionarTitulo("Id");
            tabela.adicionarTamanho(0);
            tabela.adicionarTipo("Integer");
            tabela.adicionarStatus(false);

            tabela.adicionarTitulo("Nome");
            tabela.adicionarTamanho(80);
            tabela.adicionarTipo("String");
            tabela.adicionarStatus(true);

            tabela.gravarCampos();

            PessoaVO exemplo = new PessoaVO();

            exemplo.setNoPessoa(nome);
//            exemploSalario.setVlSalario(valor);


            // Lista de Cargos e salarios
            List<PessoaVO> pessoa = pessoaDao.consultarPorExemplo(exemplo);

            // Adiciona os valores de cada cargo nas listas de ids e nomes
            for(int i = 0; i < pessoa.size(); i++) {
                tabela.adicionarRegistro(converterVoParaString(pessoa.get(i)));
            }

             return tabela;
            }
        return null;
    }

    public void carregar(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        String noArquivo = req.getParameter("noArquivo");
        String mensagem = null;

        File arquivo = new File(noArquivo);

        try{

            BufferedReader in = new BufferedReader(new FileReader(arquivo));
            String s;

            s = in.readLine();
            while (s !=null){
            System.out.println(s);
            s = in.readLine();
        }
            in.close();
        }catch (FileNotFoundException e1){
            mensagem = "Problema no carregamento do arquivo.";

        }catch(IOException e2){
            e2.printStackTrace();
        }

        if (mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

         //       cargoDao.inserir(cargo);
       //         salarioDao.inserir(salario);

                Transacao.efetivar();

                mensagem = "Parceiro incluído com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na inclusão do Parceiro: " + ex.getMessage();

                parceiro = null;
                pessoa = null;
            }
        } else {
            parceiro = null;
            pessoa = null;
        }

        this.message = mensagem;
    }

    /**
     * Recarregar a página após alguma ação de seleção de combo.
     *
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void recarregar(HttpServletRequest req, HttpServletResponse resp) {
        String idPessoa = req.getParameter("idPessoa");
//        String idSalario = req.getParameter("idSalario");

        if (idPessoa != null && !idPessoa.isEmpty()) {
            pessoa = pessoaDao.consultarPorId(idPessoa);
        }
//        if (idSalario != null && !idSalario.isEmpty()) {
//            salario = salarioDao.consultarPorId(idSalario);
//        }

    }

      public List<String> converterVoParaString(PessoaVO pessoa) {
        List<String> valores = new ArrayList<String>();

        valores.add(pessoa.getIdPessoa().toString());
        valores.add(pessoa.getNoPessoa().toString());
        valores.add(pessoa.getTlPrincipal().toString());
        valores.add(pessoa.getTlSecundario().toString());
        valores.add(pessoa.getEdPessoa().toString());
        valores.add(pessoa.getSgUF().toString());
        valores.add(pessoa.getNrCEP().toString());
        valores.add(pessoa.getEePessoa().toString());

        return valores;
    }

     public List<String> converterVoParaString(ParceiroVO parceiro) {
        List<String> valores = new ArrayList<String>();

        valores.add(parceiro.getIdParceiro().toString());
        valores.add(parceiro.getCdPessoa().toString());
        valores.add(parceiro.getNrCnpj().toString());

        return valores;
    }

     public Date validaData(String data) throws Exception {
        try {
            DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
           return df.parse(data);
        } catch ( java.text.ParseException pe) {
            throw new Exception("Por favor, informe uma data válida 5");//pe.getMessage();
        }
    }
}
